import { request } from "@umijs/max";

/**
 * 异步获取角色列表数据，支持分页查询
 * @param params - 分页查询所需的参数，类型为 API.PageParams
 * @returns 返回一个 Promise，该 Promise 解析为 API.Page<API.Role> 类型的数据，包含分页后的角色列表信息
 */
export async function getRoleList(params: API.PageParams) {
    return request<API.Page<API.Role>>('/api/system/role', {
        params,
    });
}

/**
 * 异步添加新角色
 * @param data - 要添加的角色信息，类型为 API.Role
 * @returns 返回一个 Promise，该 Promise 解析为 API.Result<any> 类型的响应数据，包含添加操作的结果信息
 */
export async function addRole(data: API.Role) {
    // 发送 POST 请求到 /api/system/role 接口，将新角色信息传递给服务器
    return request<API.Result<any>>('/api/system/role', {
        method: 'POST',
        data,
    });
}


/**
 * 异步更新角色信息
 * @param data - 要更新的角色信息，类型为 API.Role
 * @returns 返回一个 Promise，该 Promise 解析为 API.Result<any> 类型的响应数据，包含更新操作的结果信息
 */
export async function updateRole(data: API.Role) {
    // 发送 PUT 请求到 /api/system/role 接口，将更新后的角色信息传递给服务器
    return request<API.Result<any>>('/api/system/role', {
        method: 'PUT',
        data,
    });
}


/**
 * 异步删除指定 ID 的角色
 * @param id - 要删除的角色的唯一标识，类型为数字
 * @returns 返回一个 Promise，该 Promise 解析为 Result<any> 类型的响应数据，包含删除操作的结果信息
 */
export async function deleteRole(id: number) {
    return request<Result<any>>(`/api/system/role/${id}`, {
        method: 'DELETE',
    });
}

/**
 * 异步根据角色 ID 获取单个角色的详细信息
 * @param id - 要获取详细信息的角色的唯一标识，类型为数字
 * @returns 返回一个 Promise，该 Promise 解析为 API.Result<API.Role> 类型的响应数据，包含角色的详细信息
 */
export async function getRole(id: number) {
    // 发送 GET 请求到指定的 API 接口，携带角色 ID，以获取对应角色的详细信息
    return request<API.Result<API.Role>>(`/api/system/role/${id}`, {
        method: 'GET',
    });
}


/**
 * 异步获取角色树形结构数据
 * @returns 返回一个 Promise，该 Promise 解析为 API.Result<API.Role[]> 类型的响应数据，包含角色的树形结构信息
 */
export async function getRoleTree() {
    // 发送 GET 请求到 /api/system/role/tree 接口，获取角色的树形结构数据
    return request<API.Result<API.Role[]>>('/api/system/role/tree', {
        method: 'GET',
    })
}


/**
 * 异步获取角色选项数据，通常用于下拉选择框等场景
 * @returns 返回一个 Promise，该 Promise 解析为 API.Result<API.Role[]> 类型的响应数据，包含角色选项列表信息
 */
export async function getRoleOptions() {
    // 发送 GET 请求到 /api/system/role/options 接口，获取角色选项数据
    return request<API.Result<API.Role[]>>('/api/system/role/options', {
        method: 'GET',
    })
}
